package fr.bludwarf.skywarrior.global;

import java.util.ArrayList;

import fr.bludwarf.skywarrior.exceptions.IleInconnue;
import fr.bludwarf.skywarrior.exceptions.JoueurInconnu;
import fr.bludwarf.skywarrior.ile.Ile;
import fr.bludwarf.skywarrior.joueur.Joueur;

public class Monde extends EntiteMere<Joueur> {
	
	/** Iles qui étaient vierges au début de la partie */
	final ArrayList<Ile> _ilesVierges = new ArrayList<Ile>();

	public Monde(String nom) {
		super(nom);
	}

	public void ajouterJoueur(String nomJoueur, String nomIle) {
		add(new Joueur(nomJoueur, nomIle));
	}

	public void ajouterIleVierge(String nomIle) {
		_ilesVierges.add(new Ile(nomIle));
	}
	
	@Override
	public String toString() {
		final StringBuilder sb = new StringBuilder();

		sb.append("Monde :");
		
		for (final Joueur joueur : getJoueurs())
		{
			sb.append("\n\t").append(joueur);
		}

		return sb.toString();
	}
	
	public Joueur getJoueur(final String nom) throws JoueurInconnu
	{
		for (final Joueur joueur : getJoueurs())
		{
			if (joueur._nom.equalsIgnoreCase(nom))
			{
				return joueur;
			}
		}
		
		throw new JoueurInconnu(nom);
	}

	public Ile getIle(String nom) throws IleInconnue {
		// On recherche l'ile parmis tous les joueurs
		for (final Joueur joueur : getJoueurs())
		{
			for (final Ile ile : joueur.getIles())
			{
				if (ile._nom.equalsIgnoreCase(nom))
				{
					return ile;
				}
			}
		}
		
		// On recherche l'ile parmis les iles vierges
		for (final Ile ile : _ilesVierges)
		{
			if (ile._nom.equalsIgnoreCase(nom))
			{
				return ile;
			}
		}
		
		throw new IleInconnue(nom);
	}

	private ArrayList<Joueur> getJoueurs() {
		return _fils;
	}

}
